/**
 * Midlet principal de nuestra aplicacion, que constituye el punto de partida.
 *
 * NOTA: Deberemos recordar en todo momento el utilizar los recursos de la forma mas
 * eficiente posible (crear objetos cuando sea estrictamente necesario y liberar sus
 * recursos, una vez utilizados)
 */
package infbmobile.main;

// Importaciones externas
import java.io.IOException;
import javax.microedition.midlet.*;
import com.sun.lwuit.*;
import com.sun.lwuit.plaf.*;
import com.sun.lwuit.util.*;

// Importaciones internas
import infbmobile.almacenamiento.*;
import infbmobile.pantallas.*;
import infbmobile.comunicaciones.*;
import infbmobile.errores.*;
import infbmobile.util.*;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;

public class InfBMobileMedico extends MIDlet {

    // Atributos en el fichero JAD
    public String servidorWeb;
    public String puerto;

    // Identificamos las pantallas de la aplicacion principal
    private PantallaRegistro pantallaRegistro;
    private PantallaActualizacionIdentificacion pantallaActIdent;
    private PantallaMenuPrincipal pantallaMenuPrincipal;
    private PantallaBusquedaMedicamentos pantallaBusquedaMedicamentos;
    private PantallaBusquedaMisPacientes pantallaBusquedaMisPacientes;
    public PantallaGrabadora pantallaGrabadora;
    private PantallaSimulador pantallaSimulador;
    public PantallaMedicamentos pantallaMedicamentos;
    public PantallaCitas pantallaCita;

    private boolean estasRegistrado() {
        boolean res = false;
        try {           
            RecordStore rms = RecordStore.openRecordStore("identificacion", true);
            byte[] byteInputData = new byte[50];
            ByteArrayInputStream inputStream;
            DataInputStream inputDataStream;
            inputStream = new ByteArrayInputStream(byteInputData);
            inputDataStream = new DataInputStream(inputStream);
            if (rms.getNumRecords() > 0) {
                rms.getRecord(1, byteInputData, 0);             
                res=inputDataStream.readUTF()!=null;
            }          
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return res;
    }

    public void startApp() {
        try {
            // Recogemos los atributos del fichero JAD
            servidorWeb = getAppProperty("ServidorWeb");
            puerto = getAppProperty("Puerto");
            // Inicializamos el display de LWUIT
            Display.init(this);
            // Cargamos el aspecto de la aplicacion
            Resources r = Resources.open("/res/temas/hospigest_theme.res");
            UIManager.getInstance().setThemeProps(r.getTheme(r.getThemeResourceNames()[0]));
            // Cargamos el nucleo de la aplicacion


            if (estasRegistrado()) {
                Identificacion.cargar();
                mostrarPantallaMenuPrincipal();
            } else {
                mostrarPantallaRegistro();
            }
        //  cargarAplicacion();
        //mostrarPantallaSimulador();
        //mostrarPantallaMenuPrincipal();
        //  cargarAplicacion();

        //Identificacion.borrar("identificacion");
        } catch (MovilException me) {
            UIHerramientas.mostrarAviso("Error", "Se ha producido un problema en la aplicacion => " + me.getMessage());
        } catch (Exception e) {
            UIHerramientas.mostrarAviso("Error", "Se ha producido un problema en la aplicacion => " + e.getMessage());
        }
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    public void salir() {
        System.gc();
        destroyApp(false);
    }

    /*----------------------------------------------------------------------------------*/
    /**
     * Metodos para mostrar las diferentes pantallas que componen la navegabilidad
     * de la aplicacion
     */
    public void mostrarPantallaRegistro() {
        if (pantallaRegistro == null) {
            pantallaRegistro = new PantallaRegistro(this);
        }
        pantallaRegistro.show();
    }

    public void mostrarPantallaMedicamentos() {
        if (pantallaMedicamentos == null) {
            pantallaMedicamentos = new PantallaMedicamentos(this);
        }
        pantallaMedicamentos.show();
    }

    public void mostrarPantallaActualizacionIdentificacion() {
        if (pantallaActIdent == null) {
            pantallaActIdent = new PantallaActualizacionIdentificacion(this);
        }
        pantallaActIdent.show();
    }

    public void mostrarPantallaMenuPrincipal() {
        if (pantallaMenuPrincipal == null) {
            pantallaMenuPrincipal = new PantallaMenuPrincipal(this);
        }
        pantallaMenuPrincipal.show();
    }

    public void mostrarPantallaBusquedaMedicamentos() {
        if (pantallaBusquedaMedicamentos == null) {
            pantallaBusquedaMedicamentos = new PantallaBusquedaMedicamentos(this);
        }
        pantallaBusquedaMedicamentos.show();
    }

    public void mostrarPantallaSimulador() {
        if (pantallaSimulador == null) {
            pantallaSimulador = new PantallaSimulador(this);
        }
        pantallaSimulador.show();
    }

    public void mostrarPantallaCitas() {
        if (pantallaCita == null) {
            pantallaCita = new PantallaCitas(this);
        }
        pantallaCita.show();
    }

    public void mostrarPantallaBusquedaMisPacientes() {
        if (pantallaBusquedaMisPacientes == null) {
            pantallaBusquedaMisPacientes = new PantallaBusquedaMisPacientes(this);
        }
        pantallaBusquedaMisPacientes.show();
    }

    //dni del paciente
    public void mostrarPantallaGrabadora(String dni) {
        if (pantallaGrabadora == null) {
            pantallaGrabadora = new PantallaGrabadora(this, dni);
        }
        pantallaGrabadora.show();
    }
}
